These options control the C preprocessor, which is run on each C source file before actual compilation.
If you use the -E option, nothing is done except preprocessing. Some of these options make sense only together with -E because they cause the preprocessor output to be unsuitable for actual compilation.
Mac OS X includes two preprocessors: the standard GNU C preprocessor ( cpp ) and the precompilation preprocessor ( cpp-precomp ). The two preprocessors are largely similar, except for some rarely used extensions. The precompilation preprocessor( cpp-precomp ) is the default preprocessor for C and Objective-C code. (See /System/Documentation/Developer/DeveloperTools/Preprocessor/ for more information. ) The standard preprocessor ( cpp ) is the default preprocessor for Objective-C++ code. To switch to the standard preprocessor ( cpp ) on platforms on which precompiled headers are available, use the -traditonal-cpp flag on the cpp command line.
-framework
framework-name
Search the framework named framework-name for header files. The directories searched include /Local/Library/Frameworks and /System/Library/Frameworks (both are prefaced by $NEXT_ROOT on Windows NT).
-include
file
Process file as input before processing the regular input file. In effect, the contents of file are compiled first. Any -D and -U options on the command line are always processed before -include file , regardless of the order in which they are written. All the -include and -imacros options are processed in the order in which they are written.
-imacros
file
Process file as input, discarding the resulting output, before processing the regular input file. Because the output generated from file is discarded, the only effect of -imacros file is to make the macros defined in file available for use in the main input.
Any -D and -U options on the command line are always processed before -imacros file , regardless of the order in which they are written. All the -include and -imacros options are processed in the order in which they are written.
-idirafter
dir
Add the directory dir to the second include path. The directories on the second include path are searched when a header file is not found in any of the directories in the main include path (the one that -I adds to).
-iwithprefix
dir
Add a directory to the second include path. The directory's name is made by concatenating prefix and dir , where prefix was specified previously with -iprefix . If you have not specified a prefix yet, the directory containing the installed passes of the compiler is used as the default.
-iwithprefixbefore
dir
Add a directory to the main include path. The directory's name is made by concatenating prefix and dir , as in the case of -iwithprefix .
-isystem
dir
Add a directory to the beginning of the second include path, marking it as a system directory, so that it gets the same special treatment as is applied to the standard system directories.
-nostdinc
Do not search the standard system directories for header files. Only the directories you have specified with -I options (and the current directory, if appropriate) are searched. See See Options for Directory Search for information on -I .
By using both -nostdinc and -I- , you can limit the include-file search path to only those directories you specify explicitly.
-E
Run only the C preprocessor. Preprocess all the C source files specified and output the results to standard output or to the specified output file.
-M
Tell the preprocessor to output a rule suitable for make describing the dependencies of each object file. For each source file, the preprocessor outputs one make -rule whose target is the object file name for that source file and whose dependencies are all the #include header files it uses. This rule may be a single line or may be continued with \ -newline if it is long. The list of rules is printed on standard output instead of the preprocessed C program.
Another way to specify output of a make rule is by setting the environment variable DEPENDENCIES_OUTPUT (see See Environment Variables Affecting GNU CC ).
-MM
Like -M but the output mentions only the user header files included with #include " file " . System header files included with #include < file > are omitted.
-MD
Like -M but the dependency information is written to a file made by replacing ".c" with ".d" at the end of the input file names. This is in addition to compiling the file as specified-- -MD does not inhibit ordinary compilation the way -M does.
In Mach, you can use the utility md to merge multiple dependency files into a single dependency file suitable for using with the make command.
-MG
Treat missing header files as generated files and assume they live in the same directory as the source file. If you specify -MG , you must also specify either -M or -MM . -MG is not supported with -MD or -MMD . This flag is not supported on Mach.
-H
Print the name of each header file used, in addition to other normal activities. This flag is not supported on Mach.
-A
question
(
answer
)
Assert the answer answer for question , in case it is tested with a preprocessing conditional such as #if # question ( answer ). -A- disables the standard assertions that normally describe the target machine. This flag is not supported on Mach.
-D
macro
=
defn
Define macro macro as defn . All instances of -D on the command line are processed before any -U options.
-U
macro
Undefine macro macro . -U options are evaluated after all -D options, but before any -include and -imacros options.
-dM
Tell the preprocessor to output only a list of the macro definitions that are in effect at the end of preprocessing. Used with the -E option. This flag is not supported on Mach.
-dD
Tell the preprocessing to pass all macro definitions into the output, in their proper sequence in the rest of the output. This flag is not supported on Mach.
-dN
Like -dD except that the macro arguments and contents are omitted. Only #define name is included in the output. This flag is not supported on Mach.
-Wp,
option
Pass option as an option to the preprocessor. If option contains commas, it is split into multiple options at the commas.